package org.cinfo.siga.gestionacademica.datos.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Random;
import org.cinfo.core.entidades.*;

public class DAO {
   //attributes
   private ArrayList<Programa> programas;
   private ArrayList<AlumnoTipo> alumnoTipos;
   private ArrayList<Modulo> modulos;
   private ArrayList<ProgramaModulo> programaModulos;
   private ArrayList<Precio> precios;
   private int numEx = 10;
   //constructors
   public DAO(){
      programas = new ArrayList();
      alumnoTipos = new ArrayList();
      modulos = new ArrayList();
      programaModulos = new ArrayList();
      precios = new ArrayList();
   }
   //methods
   public Programa getPrograma(int cod) {
      for(Programa aux: programas){
         if(aux.getCodigo() == cod)   return aux;
      }
      return null;
   }
   
   public AlumnoTipo getAlumnoTipo(int cod) {
      for(AlumnoTipo aux: alumnoTipos){
         if(aux.getCodigo() == cod)   return aux;
      }
      return null;
   }
   
   public Modulo getModulo(int cod) {
      for(Modulo aux: modulos){
         if(aux.getCodigo() == cod)   return aux;
      }
      return null;
   }

   public ProgramaModulo getProgramaModulo(int codProg, int codMod) {
      for(ProgramaModulo aux: programaModulos){
         if(aux.getCodModulo() == codMod && aux.getCodPrograma() == codProg){
            return aux;
         }
      }
      return null;
   }
   
   public ArrayList<ProgramaModulo> getProgramaModulosxProg(int codProg) {
      ArrayList<ProgramaModulo> newList = new ArrayList();
      
      for(ProgramaModulo aux: programaModulos){
         if(aux.getCodPrograma() == codProg){
            newList.add(aux);
         }
      }
      if(newList.isEmpty()) return null;
      return newList;
   }
   
   public ArrayList<ProgramaModulo> getProgramaModulosxMod(int codMod) {
      ArrayList<ProgramaModulo> newList = new ArrayList();
      
      for(ProgramaModulo aux: programaModulos){
         if(aux.getCodModulo() == codMod){
            newList.add(aux);
         }
      }
      return newList;
   }
   
   public Precio getPrecio(int cod) {
      for(Precio aux: precios){
         if(aux.getCodigo() == cod)   return aux;
      }
      return null;
   }
   
   public ArrayList<Programa> getProgramas() {
      return programas;
   }

   /**
    * @param programa the programa to set
    */
   public void setProgramas(ArrayList<Programa> programas) {
      this.programas = programas;
   }

   /**
    * @return the alumnoTipo
    */
   public ArrayList<AlumnoTipo> getAlumnoTipos() {
      return alumnoTipos;
   }

   /**
    * @param alumnoTipo the alumnoTipo to set
    */
   public void setAlumnoTipos(ArrayList<AlumnoTipo> alumnoTipos) {
      this.alumnoTipos = alumnoTipos;
   }

   /**
    * @return the modulo
    */
   public ArrayList<Modulo> getModulos() {
      return modulos;
   }

   /**
    * @param modulo the modulo to set
    */
   public void setModulos(ArrayList<Modulo> modulos) {
      this.modulos = modulos;
   }

   /**
    * @return the programaModulo
    */
   public ArrayList<ProgramaModulo> getProgramaModulos() {
      return programaModulos;
   }

   /**
    * @param programaModulo the programaModulo to set
    */
   public void setProgramaModulos(ArrayList<ProgramaModulo> programaModulos) {
      this.programaModulos = programaModulos;
   }

   /**
    * @return the precio
    */
   public ArrayList<Precio> getPrecios() {
      return precios;
   }

   /**
    * @param precio the precio to set
    */
   public void setPrecio(ArrayList<Precio> precios) {
      this.precios = precios;
   }
   
   public void datosEjemplo(){
      Random r = new Random();

      for(int i = 0; i < 10; i++){
         programas.add(new Programa(i, "Programa " + i, true, new BigDecimal("" + i), i+4, new BigDecimal("" + (i+4))));
         modulos.add(new Modulo(i, "Modulo " + i, "Este es el modulo " + i, 1, 4, true, true));
         precios.add(new Precio(r.nextInt(numEx), r.nextInt(numEx), i, new BigDecimal("0.0")));
         alumnoTipos.add(new AlumnoTipo(i, "Alumno " + i));
         programaModulos.add(new ProgramaModulo(r.nextInt(numEx), r.nextInt(numEx)));
      }
   }
}
